#include<bits/stdc++.h>
using namespace std;
long long n,m,T,a[100001],b[100001],c[100001],Logn,x[5],ans;
char d[31][100001];
long long work(long long pos)
{
	int idx=0;
	vector<int>v[2];
	for(int i=1;i<=pos;i++)
	{
		v[0].push_back(a[i]);
	}
	for(int i=1;i<=__lg(pos);i++)
	{
		for(int j=1;j<=(1<<(__lg(pos)-i));j+=2)
		{
			int zhu=j+(d[i][(j+1)/2]=='1');
			if(zhu>=i)
			{
				v[idx^1].push_back(zhu);
			}
			else
			{
				if(zhu==j)
				{
					v[idx^1].push_back(j+1);
				}
				else
				{
					v[idx^1].push_back(j);
				}		
			}
		}
		idx=idx^1;
	}
	return v[idx][0];
}
int main(){
	freopen("arena.in","r",stdin);
	freopen("arena.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>c[i];
	}
	Logn=__lg(n);
	if((1<<Logn)!=n)
	{
		Logn++;
	}
	for(int i=1;i<=Logn;i++)
	{
		for(int j=1;j<=(1<<(Logn-i));j++)
		{
			scanf(" %c",&d[i][j]);
		}
	}
	cin>>T;
	for(int z=1;z<=T;z++)
	{
		ans=0;
		cin>>x[0]>>x[1]>>x[2]>>x[3];
		for(int i=1;i<=n;i++)
		{
			a[i]=b[i]^x[i%4];
		}
		for(long long i=1;i<=m;i++)
		{
			ans=ans^(i*work(c[i]));
		}
		cout<<ans<<endl;
	}
	return 0;
}
